package entidades;

import java.io.Serializable;
import java.text.DecimalFormat;

/**
 * Classe que representa um registro de interesse (compra ou venda) em uma ação.
 * 
 */
public class RegistroInteresse implements Serializable {
    private Acao acao;    
    private double preco; //ou máximo ou mínimo
    private double prazo;
    private String tempoInicial; 
    private String caminhoCliente;

    /**
     * Construtor da classe, que já instancia o objeto passando os parâmetros iniciais.
     * @param acao acao que o registro de interesse se refere.
     * @param prazo prazo máximo que o registro de interesse permanecerá no  servidor.
     * @param preco preço (máximo ou mínimo) que a ação vai ser transacionada.
     * @param cliente cliente que registrou o interesse na ação.
     * @param caminhoCliente endereço do XML-RPC do cliente
     */
    public RegistroInteresse(Acao acao, double prazo, double preco, String tempoInicial, String caminhoCliente) {
        this.acao = acao;        
        this.prazo = prazo;
        this.preco = preco;
        this.tempoInicial = tempoInicial;
        this.caminhoCliente = caminhoCliente;
    }   

    /**
     * Método sincronizado que retorna a ação.
     * @return ação do registro de interesse.
     */
    public synchronized Acao getAcao() {
        return acao;
    }

    /**
     * Método sincronizado que altera a ação.
     * @param acao ação a ser alterada.
     */
    public synchronized void setAcao(Acao acao) {
        this.acao = acao;
    }

    /**
     * Método sincronizado que retorna o prazo do registro de interesse.
     * @return prazo máximo do registro de interesse.
     */
    public synchronized double getPrazo() {
        return prazo;
    }

    /**
     * Método sincronizado que altera o prazo do registro de interesse.
     * @param prazo máximo do registro de interesse.
     */
    public synchronized void setPrazo(double prazo) {
        this.prazo = prazo;
    }

    /**
     * Método sincronizado que retorna o preço (máximo ou mínimo) do registro de interesse.
     * @return preço (máximo ou mínimo) do registro de interesse.
     */
    public synchronized double getPreco() {
        return preco;
    }

    /**
     * Método sincronizado que altera o preço (máximo ou mínimo) do registro de interesse.
     * @param preço (máximo ou mínimo) do registro de interesse.
     */
    public synchronized void setPreco(double preco) {
        this.preco = preco;
    }

    /**
     * Método sincronizado que retorna o tempo incial que o interesse foi registrado.
     * Utilizado para identificar unicamente cada registro.
     * @return tempo incial do registro de interesse.
     */
    public synchronized String getTempoInicial() {
        return tempoInicial;
    }

    /**
     * Método sincronizado que altera o tempo incial que o interesse foi registrado.
     * Utilizado para identificar unicamente cada registro.
     * @param tempoInicial tempo incial do registro de interesse.
     */
    public synchronized void setTempoInicial(String tempoInicial) {
        this.tempoInicial = tempoInicial;
    }
    
    /**
     * Método que converte um preço (double) para o formato String (com duas casas
     * decimais e substituindo o ponto por uma vírgula). 
     * @return string do preço convertido.
     */
    public synchronized String getPrecoString() {
       DecimalFormat fmt = new DecimalFormat("0.00");    //limita o número de casas decimais     
       String string = fmt.format(getPreco());  
       String[] part = string.split("[,]");  
       String preco = part[0]+","+part[1];  
       return preco;  
    }

    /**
     * Método sincronizado que retorna o caminho XML-RPC do cliente que o interesse foi registrado.
     * @return caminho do XML-RPC do cliente
     */
    public synchronized String getCaminhoCliente() {
        return caminhoCliente;
    }

    /**
     * Método sincronizado que modifica o caminho XML-RPC do cliente que o interesse foi registrado.
     * @param caminhoCliente caminho XML-RPC do cliente
     */
    public synchronized void setCaminhoCliente(String caminhoCliente) {
        this.caminhoCliente = caminhoCliente;
    }
    
    
}